package gw.com.jni.library.terminal;

import android.content.res.AssetManager;

import java.util.ArrayList;

/**
 * Created by reeta on 16/7/15.
 * 跟jni连通的一些native方法管理类
 */
public class GTSTerminal {

    private static GTSTerminal instance = null;

    public static GTSTerminal instance(){
        if (instance == null){
            instance = new GTSTerminal();
        }
        return instance;
    }

    static {
		System.loadLibrary("iconv");
        System.loadLibrary("GW_Terminal");
    }

    /**初始化方法*/
    public native void initTerminal(String urlStr, String sdPath, AssetManager asset, String listenerPath);
    /**跟java连接回调的类对象*/
    public native void addGTSDataListener(DataListener listener);
    /**主动断开服务器连接，type 标识断开哪个服务器*/
    public native void onDisconnect(int type);
    /**是否在登录界面*/
    public native void setLoginView(int isLoginView);

    /**重连服务器连接，type 标识重连哪个服务器*/
    public native void setReConnect(int type);
    /**网络状态*/
    public native void setNetWorkState(int type,boolean isConnect);
    /**标识应用是在后台运行还是前台运行，true标识后面，false标识前台*/
    public native void setBackRunState(boolean isBackRunning);
    /**登录*/
    public native int loginFun(String model);//登录
    /**标识界面是否已绘制好,true标识已绘制好，可发送数据通知过来*/
    public native void setViewState(boolean isResumed);
    /**登出*/
    public native void Logout(int type, int lastID);//登出
    /**退出应用*/
    public native void exitApp();
    /**语言类型设置*/
    public native void setLanguage(String type);
    /**时区设置*/
    public native void setZoneType(int type);
    /**获取时区*/
    public native int getZoneType();
    /**订阅报价*/
    public native void sendQuoteSubscribe(ArrayList codes);//订阅报价
    /**单个合约属性*/
    public native String getProtertyModel(int uiCode);
    /**搜索最热产品列表*/
    public native String getHotProductList(int uiNum);
    /**按产品名称搜索产品列表*/
    public native String searchProductList(String sName);
    /**保存到历史数据*/
    public native int addProductToHistory(int uCode);
    /**获取全部历史数据*/
    public native String getAllProductHistory();
    /**移除全部历史数据*/
    public native int removeAllProductHistory();
    /**层级保证金*/
    public native String getMarginLevel(int uiCode);
    /**下单界面获取到的相关产品*/
    public native String getTradeParamModel(int uiCode);
    /**
     * 保存自选标识
     * @param uiCode
     */
    public native void addSelectStock(int uiCode);

    /**
     * 删除自选标识
     * @param uiCode
     */
    public native void delSelectStock(int uiCode);

    /**通知后台现在进入到下单相关界面*/
    public native void nofityOrder(int uiCode);
    /**下单，包含市价开仓，挂单，平仓，改单，改止损止盈*/
    public native int reqOrder(int type, String mData);
    /**撤单*/
    public native void reqOrderCancel(int orderId, int seq);
    /**保存自选产品*/
    public native void saveCustomer(ArrayList codes);
    /**修改密码*/
    public native void updatePassword(String originalPassword, String newPassword);
    /**忘记密码*/
    public native void resetPassword(String accoutid, String email);
    /**版本更新*/
    public native void getUpdateVersion();
    /**资讯列表*/
    public native void getNewsList(String type, int pageSize, int pageNo);
    /**消息中心列表*/
    public native void getBulletinList(int subType, int pageSize, int pageNo);
    /**消息中心详情*/
    public native void getBulletinDetail(int dataID, String language, int seq);
	/**手机号码*/
	public native void getMobileNumber();
    /**需要用到单点登录的地址，调用此方法直接返回显示地址*/
    public native void getSSOURL(int type, int seq);
	/**报表 需要用到单点登录的地址，调用此方法直接返回显示地址*/
	public native void getReportSSOURL(int type, int seq, String pattern, String category);

    /**设置资讯已读标志,type标识是消息还是资讯，subtype标识资讯类型*/
    public native void setNewsMarkRead(int type,String subType,int dataid);
    /**获取资讯已读标志*/
    public native boolean getNewsMarkRead(int type,String subType,int dataid);
    /**获取所有资讯已读标志*/
    public native void getNewsMarkReads(int type,String subType,ArrayList<Integer> mdata);
    /**收藏资讯*/
    public native void saveNewsInfo(String dataid, String data);
    /**获取收藏的资讯*/
    public native String getNewsInfo();
    /**获取收藏的资讯的标识*/
    public native boolean getNewInfo(String dataid);
    /**取消收藏收藏的资讯的标识*/
    public native boolean resetOneNewsInfo(String dataid);


    /**分时图数据请求*/
    public native void requestTimeData(int zoneType, int uiCode, long time, int num, int uSeq);
    /**K线数据请求*/
    public native void requestKData(int uiBourseID, int uiCodeID, int nStartTime, int nKLineType, int nParam, int nNum, int uSeq);

    /**分时图数据列表*/
    public native int getUptrendDataList(int uiCode, int uiDay, ArrayList mTrendList);

    /**获取分时图最后一根线*/
    public native int getUptrendDataLatest(int uiCode, Object trendModel);

    /**K线图数据列表*/
    public native int getKLineDataList(int uiCodeId, int uiInterval, int uiParam, int uiCurTime, int nShNum, ArrayList mKLineList);

	/**获取K线图最后一根线*/
    public native int getKLineDataLatest(int uiCodeId, int uiInterval, int uiParam, Object klineModel);

	/**注册接收K线最新一根线的通知*/
	public native int registerKLineObersver(int uiCodeId);

	/**解注册接收K线最新一根线的通知*/
	public native int unRegisterKLineObersver(int uiCodeId);

	/**注册接收分时图最新一根线的通知*/
	public native int registerUptrendObersver(int uiCodeId);

	/**解注册接收分时图最新一根线的通知*/
	public native int unRegisterUptrendObersver(int uiCodeId);

    /**指标列表数据获取*/
    public native void getKIndicatorsDataList(Object mReq);

    /**异步通知获取指标数据*/
    public native void asyncCalcIndicator(int uiCodeId);

	/**异步保存指标参数*/
	public native void asyncSaveFormularContent(Object formularContent, int uiInterval);

    /**获取指标参数*/
    public native void getFormularContent(String name, Object formularContent, int uiInterval);

    /**还原指标默认值*/
    public native void setFormularDefalut(String name, Object formularContent, int uiInterval);

	/**清除图表缓存数据，不包括DB*/
	public native void clearAllChartCache();

    /**清除所有缓存数据*/
    public native void ClearAllCacheData();

    /* 设置日志存储到日志文件中的级别， 只有大于等于这个级别的日志才会被写入文件*/
    public native void setLogLevel(int nLevel);

	/* 设置是否将日志存储到日志文件中*/
	public native void setLogEnable(int nEnable);

    //http请求相关
    /**配置中心的通用接口*/
    public native int NormalReqConfigSvr(String reqName, String jsonParam, int nSeq);
}
